#ifndef __ABSTRACTION_H__
#define __ABSTRACTION_H__

class AbstractionImp;
class Abstraction
{
public:
    Abstraction() = default;
    virtual ~Abstraction() = default;

    virtual void Operation() = 0;
};

class RedefineAbstraction : public Abstraction
{
public:
    RedefineAbstraction(AbstractionImp *imp);
    ~RedefineAbstraction();

    void Operation();

private:
    AbstractionImp *imp_;
};

#endif

